﻿// Autore: Mattia Barrasso

using System.Linq;
using NUnit.Framework;
using RecipesManager.Data;
using TechTalk.SpecFlow;
using White.Core.UIItems;
using White.Core.UIItems.WindowItems;

namespace RecipesManager.Specs.Ricetta
{
    [Binding, Scope(Feature = "RimuoviRicetta")]
    class RimuoviRicetta : RicettaBDD
    {
        Window _dialog;
        Button _confirm;
        Button _cancel;
        Button _accept;

        void getConfirmDialogUi()
        {
            _dialog = MainWindow.ModalWindows()[0];
            _confirm = MainWindow.Get<Button>("6");
            _cancel = MainWindow.Get<Button>("7");
        }

        void getAcceptDialogUi()
        {
            _dialog = MainWindow.ModalWindows()[0];
            _accept = MainWindow.Get<Button>("2");
        }

        [BeforeScenario]
        public new void SetUpScenario()
        {
            base.SetUpScenario();
        }

        [AfterScenario]
        public new void TearDownScenario()
        {
            base.TearDownScenario();
        }

        [Given(Regex = "la ricetta \"([a-zA-Z ]+)\" esiste")]
        public void DatoRicettaEsistente(string ricetta)
        {
            Manager.Recipes.Add(ricetta);
        }

        [Given(Regex = "la ricetta \"([a-zA-Z ]+)\" è una sotto-ricetta di \"([a-zA-Z ]+)\"")]
        public void DatoSottoRicetta(string sottoRicetta, string ricetta)
        {
            Assert.That(Manager.Recipes.Contains(ricetta));
            Assert.That(Manager.Recipes.Contains(sottoRicetta));
            Manager.Recipes[ricetta].Steps.AddSubRecipe(sottoRicetta);
        }

        [Given(Regex = "seleziono la ricetta \"([a-zA-Z ]+)\"")]
        public void DatoSelezionoRicetta(string ricetta)
        {
            NavigateToRecipes();
            GetRecipeUi();

            Assert.That(Recipes.Items.Exists(recipe => recipe.Text.Equals(ricetta)));
            Assert.That(Manager.Recipes.Contains(ricetta));
            Recipes.Select(ricetta);
        }

        [When(Regex = @"elimino la ricetta")]
        public void QuandoElimino()
        {
            RemoveRecipe.Click();
        }

        [Then(Regex = @"appare un messaggio")]
        public void AlloraSuccesso()
        {
            Assert.That(MainWindow.ModalWindows().Count() == 1);
        }

        [When(Regex = "confermo")]
        public void QuandoConfermo()
        {
            this.getConfirmDialogUi();
            _confirm.Click();
            Assert.That(!MainWindow.ModalWindows().Any());
        }

        [When(Regex = "accetto")]
        public void QuandoAccetto()
        {
            this.getAcceptDialogUi();
            _accept.Click();
            Assert.That(!MainWindow.ModalWindows().Any());
        }

        [Then(Regex = "la ricetta \"([a-zA-Z ]+)\" non esiste")]
        public void AlloraIngredienteNonEsiste(string ricetta)
        {
            Assert.That(!Recipes.Items.Exists(item => item.Text.Equals(ricetta)));
            //BackToMainMenu.Click();
            Assert.That(!Manager.Recipes.Contains(ricetta));
        }

        [Then(Regex = "la ricetta \"([a-zA-Z ]+)\" esiste")]
        public void AlloraIngredienteEsiste(string ricetta)
        {
            Assert.That(Recipes.Items.Exists(item => item.Text.Equals(ricetta)));
            //BackToMainMenu.Click();
            Assert.That(Manager.Recipes.Contains(ricetta));
        }
    }
}
